﻿// -------------------------------------------------------------------------
//    @FileName         :    NFBagPageInterfacePackage.cpp
//    @Author           :    gaoyi
//    @Date             :    2024/12/24
//    @Email            :    445267987@qq.com
//    @Module           :    NFBagPageInterfacePackage
//    @Desc             :    背包页签的接口实现：可添加规则与满仓错误码。
// -------------------------------------------------------------------------

#include "NFBagPageInterfacePackage.h"
#include "NFBagPageOpDefine.h"
#include <proto_cs_cmd.nanopb.h>
#include <DescStore/ItemDesc.h>
#include <NFComm/NFPluginModule/NFCheck.h>

/**
 * @brief 构造函数
 * @param pBagPage 背包页签对象指针
 */
NFBagPageInterfacePackage::NFBagPageInterfacePackage(NFBagPage* pBagPage):NFBagPageInterfaceBase(pBagPage)
{

}

/**
 * @brief 析构函数
 */
NFBagPageInterfacePackage::~NFBagPageInterfacePackage()
{
}

/**
 * @brief 设置格子物品
 * @param pBagPageOp 页签操作器
 * @param iGridIndex 格子索引
 * @param pItem 物品指针
 * @param bPreCheckFlag 是否为预检查模式
 * @return 0成功，非0失败
 */
int NFBagPageInterfacePackage::SetItem(const NFBagPageOp* pBagPageOp, int iGridIndex, const NFGridItem* pItem, bool bPreCheckFlag)
{
    int iRetCode = NFBagPageInterfaceBase::SetItem(pBagPageOp, iGridIndex, pItem, bPreCheckFlag);
    CHECK_ERR(0, iRetCode, "NFBagPageInterfaceBase::SetItem Failed, iGridIndex:{}", iGridIndex);

    int iPagType = 0;
    iRetCode = GetBagType(iPagType);
    CHECK_ERR(0, iRetCode, "GetBagType fail");

    return 0;
}

/**
 * @brief 提交后回调
 * @param pBagPageOp 页签操作器
 * @return 0成功，非0失败
 */
int NFBagPageInterfacePackage::OnCommitAfter(const NFBagPageOp* pBagPageOp)
{
    return NFBagPageInterfaceBase::OnCommitAfter(pBagPageOp);
}

/**
 * @brief 检查物品是否可以添加到本页签
 * @param stWillAddItemData 待添加物品数据
 * @param bCanAdd 输出是否可以添加
 * @return 0成功，非0失败
 */
int NFBagPageInterfacePackage::ItemCanAdd(const WillAddItemData& stWillAddItemData, bool& bCanAdd)
{
    auto pDesc = ItemDesc::Instance()->GetDesc(stWillAddItemData.id);
    CHECK_NULL_WF(0, pDesc, "ItemDesc::GetDesc Failed, id:{}", stWillAddItemData.id);

    int iPageType = 0;
    int iRetCode = GetBagType(iPageType);
    CHECK_ERR(0, iRetCode, "GetBagType faile");

    bCanAdd = NFItemUtil::ItemCanAddToBagPage(pDesc, iPageType);
    return 0;
}

/**
 * @brief 获取页签满时的错误码
 * @param iErrCode 输出错误码
 * @return 0成功，非0失败
 */
int NFBagPageInterfacePackage::GetErrCodeWhenFull(int& iErrCode)
{
    iErrCode = ERR_CODE_BAG_FULL;
    return 0;
}
